diff options
Diffstat (limited to 'app/[lng]/evcp/(evcp)/materials/page.tsx')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/materials/page.tsx | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/materials/page.tsx b/app/[lng]/evcp/(evcp)/materials/page.tsx new file mode 100644 index 00000000..00983a3f --- /dev/null +++ b/app/[lng]/evcp/(evcp)/materials/page.tsx @@ -0,0 +1,76 @@ +/** + * 자재마스터 테이블 + * MDG 자재마스터를 그대로 보여줄 것임 + * 수정/추가 기능은 불필요 + */ + +import * as React from "react" +import { type SearchParams } from "@/types/table" + +import { Skeleton } from "@/components/ui/skeleton" +import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" +import { Shell } from "@/components/shell" +import { getMaterials } from "@/lib/material/services" +import { MaterialTable } from "@/lib/material/table/material-table" +import { InformationButton } from "@/components/information/information-button" +import { searchParamsCache } from "@/lib/material/validations" + +interface MaterialPageProps { + searchParams: Promise<SearchParams> +} + +export default async function MaterialPage(props: MaterialPageProps) { + const searchParams = await props.searchParams + + // searchParamsCache를 사용해서 파라미터 파싱 + const search = searchParamsCache.parse(searchParams) + + // pageSize 기반으로 모드 자동 결정 + const isInfiniteMode = search.perPage >= 1_000_000 + + // 페이지네이션 모드일 때만 서버에서 데이터 가져오기 + // 무한 스크롤 모드에서는 클라이언트에서 SWR로 데이터 로드 + const promises = isInfiniteMode + ? undefined + : Promise.all([ + getMaterials(search as any), // 타입 캐스팅으로 임시 해결 + ]) + + return ( + <Shell className="gap-2"> + <div className="flex items-center justify-between space-y-2"> + <div className="flex items-center justify-between space-y-2"> + <div> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight"> + 자재마스터 + </h2> + <InformationButton pagePath="evcp/material" /> + </div> + <p className="text-muted-foreground"> + MDG로부터 수신된 자재마스터 정보입니다. + </p> + </div> + </div> + </div> + + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}> + {/* 추가 컴포넌트가 필요한 경우 여기에 */} + </React.Suspense> + + <React.Suspense + fallback={ + <DataTableSkeleton + columnCount={5} + searchableColumnCount={1} + filterableColumnCount={3} + cellWidths={["10rem", "15rem", "20rem", "12rem", "12rem", "12rem"]} + shrinkZero + /> + } + > + <MaterialTable promises={promises} /> + </React.Suspense> + </Shell> + ) +}
\ No newline at end of file |
